package array;

import java.util.*;

/**
 * 2605. 从两个数字数组里生成最小数字
 *      给你两个只包含 1 到 9 之间数字的数组nums1 和nums2，每个数组中的元素 互不相同
 *      请你返回 最小 的数字，两个数组都 至少 包含这个数字的某个数位
 *  题解：
 *      使用两个for循环遍历两个数组，得到各个数组中的最小值
 *      第一个数组将其加入Set集合中
 *      第二个数组进行判断，若有元素相等则将其加入list的集合中
 *      最后进行判断
 *          如果list的集合为空则没有相等的元素，那么就返回两个数组中最小值组成的最小数
 *          如果list的集合不为空，则通过for循环遍历找出最小值将其返回
 */
public class MinNumber {

    public int minNumber(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet<>();
        ArrayList<Integer> list = new ArrayList<>();
        int minNums1 = Integer.MAX_VALUE, minNums2 = Integer.MAX_VALUE;
        for (int i = 0; i < nums1.length; i++) {
            set.add(nums1[i]);
            if (nums1[i] < minNums1) {
                minNums1 = nums1[i];
            }
        }
        for (int i = 0; i < nums2.length; i++) {
            if (nums2[i] < minNums2) {
                minNums2 = nums2[i];
            }
            if (!set.add(nums2[i])) {
                list.add(nums2[i]);
            }
        }
        if (list.isEmpty()) {
            return Math.min(minNums1, minNums2) * 10 + Math.max(minNums1, minNums2);
        } else {
            int min = Integer.MAX_VALUE;
            for (Integer integer : list) {
                if(integer<min){
                    min = integer;
                }
            }
            return min;
        }
    }

}
